/*
 * ArrayStatic.c
 *
 *  Created on: 11/11/2011
 *      Author: marcio
 */
#include "Array.h"

Array* array_newArray(long size){
	Array* a = (Array*)malloc(sizeof(Array));
	a->size = size > 0? size: 0;
	a->elem = malloc(sizeof(void*)*a->size);
	return a;
}

void* array_getElem(Array* a, long i){
	return i < a->size && i > -1 ? a->elem[i]: NULL;
}

int array_setElem(Array* a, long i, void* newElem){
	if(i < a->size && i > -1 ){
		a->elem[i] = newElem;
		return 0;
	}
	return -1;
}

int array_putElem(Array* a, void* newElem){
	int i;
	if(newElem != NULL) return -1;
	for(i = 0 ; i < a->size; i++){
		if(a->elem[i] == NULL){
			a->elem[i] = newElem;
			return i;
		}
	}
	return -1;
}

int array_Order(Array* a, int (*function)(const void*,const void*)){
	qsort( a->elem, sizeof(void*), a->size, function);
	return 0;
}

int array_isEmpty(Array* a){
	int i;
	for(i = 0 ; i < a->size; i++){
		if(a->elem[i] != NULL) return 1;
	}
	return 0;
}

int array_searchFor(Array* a, void* elem, int (*isEqual)(void*, void*)){
	int i;
	for(i = 0 ; i < a->size; i++){
		if(isEqual(elem,a->elem[i])) return i;
	}
	return -1;
}

int array_delete(Array* a){
	int i = 0;
	for(i = 0; i < a->size; i++){
		if(a->elem[i] != NULL)free(a->elem[i]);
	}
	free(a->elem);
	return free(a);
}
